package com.yuandian.business.monitor.service;

import com.yuandian.api.business_monitor.po.AlarmParams;
import com.yuandian.api.business_monitor.po.QueryBusinessOverviewParams;
import com.yuandian.api.business_monitor.po.SystemOverviewParams;
import com.yuandian.api.business_monitor.vo.AlarmProportionVo;
import com.yuandian.api.business_monitor.vo.BusinessOverviewVo;
import com.yuandian.api.management.vo.StepExportVo;
import com.yuandian.bpm.common.core.util.R;
import com.yuandian.utils.PageDataInfo;
import com.yuandian.vo.TrendDataVo;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * 说明：业务概况service接口
 *
 * @Author yanjun
 * @Date 2020/10/26 16:13
 */
public interface IBusinessOverviewService {

	/**
	 * 分页查询业务概况列表
	 *
	 * @param params 业务概况查询参数
	 * @return 通用返回对象
	 */
	PageDataInfo queryBusinessOverviewListPage(QueryBusinessOverviewParams params);

	/**
	 * 导出业务概况列表Excel文件
	 *
	 * @param params 业务概况查询参数
	 */
	void exportBusinessOverviewList(QueryBusinessOverviewParams params, HttpServletResponse response) throws IOException;

	/**
	 * 导出业务概况列表Excel文件
	 *
	 * @param params 业务概况查询参数
	 */
	void exportBusinessOverviewListCopy(QueryBusinessOverviewParams params, HttpServletResponse response) throws IOException;

	/**
	 * 根据系统编码、业务编码和时间范围查询业务健康度、成功率等信息
	 *
	 * @param params（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	BusinessOverviewVo getBuinessPercen(QueryBusinessOverviewParams params);

	/**
	 * 根据系统编码、业务编码和时间范围查询业务健康度、访问量、平均响应时长（业务监控详情页折线数据源）
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 业务健康度、访问量、平均响应时长结果集
	 */
	TrendDataVo getBuinessLineChartData(QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询相应的步骤分析数据
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	R getBuinessProcessAnalysis(QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询步骤趋势分析数据
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	R getBuinessProcessTrendData(QueryBusinessOverviewParams params);

	List<StepExportVo> queryStepList(QueryBusinessOverviewParams params);

	/**
	 * 获取总转换率和访问量
	 *
	 * @param params
	 * @return
	 */
	R getConversionRate(QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询网段详细信息数据
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	R getSegmentDetailList(QueryBusinessOverviewParams params);

	/**
	 * 根据系统ID、业务编码、时间范围查询it路径图
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围）
	 * @return 通用结果集
	 */
	R stepEndToEndRelation(QueryBusinessOverviewParams params);

	/**
	 * 修改网端坐标
	 *
	 * @param params
	 * @return 通用结果集
	 */
	R updateSegmentPosition(QueryBusinessOverviewParams params);

	/**
	 * 业务步骤统计列表
	 *
	 * @param params
	 * @return 通用结果集
	 */
	R getBusiStepStatList(QueryBusinessOverviewParams params);

	/**
	 * 步骤列表导出
	 *
	 * @param params   请求参数
	 * @param response 响应对象
	 */
	void exportStepList(QueryBusinessOverviewParams params, HttpServletResponse response) throws IOException;

	PageDataInfo querySystemOverview(SystemOverviewParams params);

	/**
	 * 按照系统ID、业务编码、时间范围、端口ID分类统计各类型告警（告警类型环形图---业务监控详情页面）
	 *
	 * @param params 查询参数（系统ID、业务编码、时间范围、端口ID）
	 * @return 返回通用结果集
	 */
	List<AlarmProportionVo> getBusinessMonitorAlarmPercent(AlarmParams params);

	/**
	 * 新增网端坐标
	 *
	 * @param params
	 * @return
	 */
	R addSegmentPosition(QueryBusinessOverviewParams params);
}
